package model.registro;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;

public class RegistroFTRS extends Registro {
	private float pesoGlobal;

	private int offSetDocumentos;

	private String apalabra;

    public RegistroFTRS(String word, int offsetDocList,float pesoGlobal){
    	this.apalabra=word;
    	this.offSetDocumentos = offsetDocList;
    	this.pesoGlobal=pesoGlobal;
    }
    
    public RegistroFTRS(){
    	
    }
	
	public int getOffSetDocumentos() {
		return offSetDocumentos;
	}

	public void setOffSetDocumentos(int offSetDocumentos) {
		this.offSetDocumentos = offSetDocumentos;
	}

	public String getPalabra() {
		return apalabra;
	}

	public void setPalabra(String palabraBuscada) {
		this.apalabra = palabraBuscada;
	}

	public float getPesoGlobal() {
		return pesoGlobal;
	}

	public void setPesoGlobal(float pesoGlobal) {
		this.pesoGlobal = pesoGlobal;
	}

	public int getTamanioOffSet() {
		return ConversionesTiposDatos.sizeOfInt();
	}

	public int getTamanioPalabra() {
		return this.apalabra.getBytes().length;
	}

	public int getTamanioRegistro() {
		return apalabra.getBytes().length + 2
				* ConversionesTiposDatos.sizeOfInt() + Float.SIZE/8;
	}

	public byte[] convertirRegistroABytes() throws IOException {

		ByteArrayOutputStream bytesRegistro = new ByteArrayOutputStream();
		DataOutputStream output = new DataOutputStream(bytesRegistro);

		output.writeInt(apalabra.getBytes().length);
		output.writeBytes(apalabra);
		output.writeFloat(getPesoGlobal());
		output.writeInt(getOffSetDocumentos());

		return bytesRegistro.toByteArray();

	}

	public void convertirBytesARegistro(byte[] xInput) throws IOException {

		ByteArrayInputStream bytesRegistro = new ByteArrayInputStream(xInput);
		DataInputStream input = new DataInputStream(bytesRegistro);

		int tamanioTermino = input.readInt();
		byte[] bytesTermino = new byte[tamanioTermino];
		input.read(bytesTermino);
		apalabra = new String(bytesTermino);

		setPesoGlobal(input.readFloat());
		setOffSetDocumentos(input.readInt());

	}

	public int compareTo(RegistroFTRS o) {
		return this.getPalabra().compareTo(o.getPalabra());
	}
}
